Python 3.7 + Selenium UI 自动化测试简单实例

您所在的位置:网站首页 python UI自动化 Python 3.7 + Selenium UI 自动化测试简单实例

Python 3.7 + Selenium UI 自动化测试简单实例

2023-10-15 12:51| 来源: 网络整理| 查看: 265

本篇主要应用Django搭建学生管理平台,使用Python + Selenium 模拟用户注册登录场景简单实例。Django实战部分往后可能和大家见面,目前还在学习,对于一些异常处理和业务模型还在摸索。

Django学生管理平台仓库地址: https://github.com/A-HUAN/Django-courseSelectionSystem

实际项目中用python脚本简单实现UI测试的步骤:

1.被测环境测试数据预清理 -> 2.访问网页-> 3.定位元素 -> 4.模拟人工操作 -> 5.对比数据是否与预期一致 -> 6.测试数据清理

一.分析

打开学生管理平台,浏览登录&注册页面查看其源代码,定位想要的元素 —— 导航栏,输入框,按钮。

然后我们通过定位的元素对于人工操作流程进行还原,模拟学生注册场景。

二.实现from selenium import webdriver import time import pymysql

1.被测环境测试数据预清理&测试后数据清理

首先,因为UI脚本一般都是定期执行的,以注册情景来说,重复测试数据会影响测试的结果,所以就需要先对测试环境的测试数据进行清理 。def dbClear(username): # --- 环境清理 ---# # 打开数据库连接 db = pymysql.connect("127.0.0.1","courseSelectionSystem","123456789","courseSelectionSystem") # 创建游标对象 cursor = db.cursor() # SQL sql_1 = "select * from sjjh_channel.system_user WHERE name = %s" sql_2 = "select * from sjjh_channel.system_student WHERE studentName = %s" sql_3 = "delete from sjjh_channel.system_student WHERE studentName = %s" sql_4 = "delete from sjjh_channel.system_user WHERE name = %s" try: # 执行SQL语句 cursor.execute(sql_2,username) data2 = cursor.fetchone() if data2 == None: print('学生表测试数据为空', data2) else: print('学生表测试数据存在', data2) cursor.execute(sql_3,username) # 执行删除SQL语句 # 执行SQL语句 cursor.execute(sql_1,username) # 获取单条查询数据 data = cursor.fetchone() if data == None: print('用户表测试数据为空',data) else: print('用户表测试数据存在',data) cursor.execute(sql_4,username) # 执行删除SQL语句 # 提交事务 db.commit() print('测试数据清理成功') except: # 发生错误回滚 db.rollback() print("测试数据清理失败") db.close()

2.访问网页定位元素,模拟人工操作,对比生成数据是否与预期一致。

接下来开始设计流程模拟用户注册&登录场景

def workFlow(url_1,username,password,real_name,user_id): # 设置浏览器的驱动 driver = webdriver.Chrome() # 打开URL driver.get(url_1) # 点击注册 driver.find_element_by_xpath('//*[@id="my-nav"]/ul[2]/li[2]/a').click() # --- 重置注册场景 ---# # 填写信息 driver.find_element_by_id('id_username').send_keys('111111') driver.find_element_by_id('id_password1').send_keys('111111') driver.find_element_by_id('id_password2').send_keys('111111') driver.find_element_by_id('id_real_name').send_keys('111111') driver.find_element_by_id('id_id').send_keys('111111') time.sleep(1) # 先定位到下拉框 temp = driver.find_element_by_id('id_kind') # 再点击下拉框下的选项 temp.find_element_by_xpath('//*[@id="id_kind"]/option[2]').click() time.sleep(2) # 点击重置 driver.find_element_by_xpath('/html/body/div/div/form/button[1]').click() # --- 正常注册场景 ---# # 二次填写信息 driver.find_element_by_id('id_username').send_keys(username) driver.find_element_by_id('id_password1').send_keys(password) driver.find_element_by_id('id_password2').send_keys(password) driver.find_element_by_id('id_real_name').send_keys(real_name) driver.find_element_by_id('id_id').send_keys(user_id) time.sleep(1) # 先定位到下拉框 temp = driver.find_element_by_id('id_kind') # 再点击下拉框下的选项 temp.find_element_by_xpath('//*[@id="id_kind"]/option[2]').click() time.sleep(2) # 点击提交按钮 driver.find_element_by_xpath('/html/body/div/div/form/button[2]').click() # 点击登录导航 driver.find_element_by_xpath('//*[@id="my-nav"]/ul[2]/li[1]/a').click() # --- 错误密码场景 ---# # 输入账户名/密码 driver.find_element_by_id("id_username").send_keys(username) driver.find_element_by_id("id_password").send_keys('123') time.sleep(2) # 点击登录按钮 driver.find_element_by_xpath('/html/body/div/div/form/button[2]').click() time.sleep(2) driver.get_screenshot_as_file("E:\\Python Study\\1.png") #截图 err_1 = driver.find_element_by_xpath("/html/body/div/div/form/div[1]").text print('获取错误提示文本信息',err_1) #打印信息 time.sleep(1) driver.find_element_by_id("id_username").clear() driver.find_element_by_id("id_password").clear() # --- 错误用户场景 ---# # 输入账户名/密码 driver.find_element_by_id("id_username").send_keys('abc') driver.find_element_by_id("id_password").send_keys(password) time.sleep(2) # 点击登录按钮 driver.find_element_by_xpath('/html/body/div/div/form/button[2]').click() time.sleep(2) driver.get_screenshot_as_file("E:\\Python Study\\2.png") #截图 err_2 = driver.find_element_by_xpath("/html/body/div/div/form/div[1]").text print('获取错误提示文本信息',err_2) #打印信息 time.sleep(1) driver.find_element_by_id("id_username").clear() driver.find_element_by_id("id_password").clear() # --- 正确登录场景 ---# # 输入账户名/密码 driver.find_element_by_id("id_username").send_keys(username) driver.find_element_by_id("id_password").send_keys(password) time.sleep(2) # 点击登录按钮 driver.find_element_by_xpath('/html/body/div/div/form/button[2]').click() time.sleep(2) driver.get_screenshot_as_file("E:\\Python Study\\3.png") #截图 # --- 账号登出场景 ---# cookie = driver.get_cookies() print('登录状态获取sessionid',cookie) driver.find_element_by_xpath('//*[@id="my-nav"]/ul[2]/li[2]/a').click() time.sleep(1) driver.refresh() cookie_2 = driver.get_cookies() print('登出状态获取sessioid',cookie_2) driver.get_screenshot_as_file("E:\\Python Study\\4.png") #截图 driver.quit()

3.执行

if __name__ == '__main__': username = 'Alon' password = '123456' real_name = 'Alon' user_id = '0001' url_1 = "http://127.0.0.1:8000/index/" dbClear(username) workFlow(url_1,username,password,real_name,user_id) dbClear(username)

4.日志输出

C:\Python37\python.exe "E:/Python Study/20190909.py" 学生表测试数据为空 None 用户表测试数据为空 None 测试数据清理成功 获取错误提示文本信息 密码不正确! 获取错误提示文本信息 用户不存在! 登录状态获取sessionid [{'domain': '127.0.0.1', 'expiry': 1599450092.979737, 'httpOnly': False, 'name': 'csrftoken', 'path': '/', 'secure': False, 'value': 'Vb29UxKCEVaMhPSkps7gGzVGVcgopIUW7u51v95ZnYeIYAUEiOqlH4sKEZ96jNQ6'}, {'domain': '127.0.0.1', 'expiry': 1569210100.862583, 'httpOnly': True, 'name': 'sessionid', 'path': '/', 'secure': False, 'value': '7uhp2y6wpx3vq1s778uvdclapkptr29w'}] 登出状态获取sessioid [{'domain': '127.0.0.1', 'expiry': 1599450092.979737, 'httpOnly': False, 'name': 'csrftoken', 'path': '/', 'secure': False, 'value': 'Vb29UxKCEVaMhPSkps7gGzVGVcgopIUW7u51v95ZnYeIYAUEiOqlH4sKEZ96jNQ6'}] 学生表测试数据存在 (16, '0001', 'Alon', None, None) 用户表测试数据存在 (16, 'Alon', '123456', 'student', datetime.datetime(2019, 9, 9, 11, 41, 21, 337193)) 测试数据清理成功

5.场景截图



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3